#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QCursor>
#include <QIcon>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QRadioButton>
#include <QButtonGroup>
#include <QCheckBox>
#include <QVBoxLayout>
#include <ctime>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);



    srand(static_cast<unsigned int>(time(0)));
































//    QVBoxLayout layout(this);

//    // 创建多个复选框
//    QCheckBox *checkBox1 = new QCheckBox("Option 1");
//    QCheckBox *checkBox2 = new QCheckBox("Option 2");
//    checkBox1->move(100,100);
//    checkBox2->move(100, 150);
//    // 添加复选框到布局中
//    layout.addWidget(checkBox1);
//    layout.addWidget(checkBox2);

//    // 设置默认选中状态
//    checkBox1->setChecked(true);

//    // 连接信号和槽，处理选中状态变化
//    QObject::connect(checkBox1, &QCheckBox::stateChanged, [&](int state) {
//        if (state == Qt::Checked) {
//            qDebug() << "Option 1 checked";
//        } else {
//            qDebug() << "Option 1 unchecked";
//        }
//    });

//    QObject::connect(checkBox2, &QCheckBox::stateChanged, [&](int state) {
//        if (state == Qt::Checked) {
//            qDebug() << "Option 2 checked";
//        } else {
//            qDebug() << "Option 2 unchecked";
//        }
//    });
















//    // 使用 QButtonGroup 对单选按钮进行分组
//    QButtonGroup* group1 = new QButtonGroup(this);
//    QButtonGroup* group2 = new QButtonGroup(this);
//    QButtonGroup* group3 = new QButtonGroup(this);

//    // 把上述单选按钮, 放到不同的组里.
//    group1->addButton(ui->radioButton);
//    group1->addButton(ui->radioButton_2);
//    group1->addButton(ui->radioButton_3);

//    group2->addButton(ui->radioButton_4);
//    group2->addButton(ui->radioButton_5);
//    group2->addButton(ui->radioButton_6);

//    group3->addButton(ui->radioButton_7);
//    group3->addButton(ui->radioButton_8);
//    group3->addButton(ui->radioButton_9);










//    Gender = new QLabel(this);
//    Gender->setText("请选择你的性别:");
//    Gender->setGeometry(200,180, 200 ,20);
////创建两个QRadioButton按钮
//    ManRadioButton = new QRadioButton(this);
//    WomanRadioButton = new QRadioButton(this);
//    //设置默认选项
//    ManRadioButton->setChecked(true);
//    Gender->setText("请选择你的性别:man");
//    ManRadioButton->move(200,200);
//    WomanRadioButton->move(200,230);
//    ManRadioButton->setText("man");
//    WomanRadioButton->setText("woman");
//    connect(ManRadioButton, &QRadioButton::clicked, this, &Widget::HandleManRadioButtonClick);
//    connect(WomanRadioButton, &QRadioButton::clicked, this, &Widget::HandleWomanRadioButtonClick);




//    connect(ui->pushButton_down, &QPushButton::clicked, this, &Widget::HandleDownCilck);
//    connect(ui->pushButton_up, &QPushButton::clicked, this, &Widget::HandleUpCilck);
//    connect(ui->pushButton_left, &QPushButton::clicked, this, &Widget::HandleLeftCilck);
//    connect(ui->pushButton_right, &QPushButton::clicked, this, &Widget::HandleRightCilck);

    // 直接通过按键的名字来设置. 虽然简单, 但是容易写错.
//    ui->pushButton_up->setShortcut(QKeySequence("ctrl + w"));
//    ui->pushButton_down->setShortcut(QKeySequence("s"));
//    ui->pushButton_left->setShortcut(QKeySequence("a"));
//    ui->pushButton_right->setShortcut(QKeySequence("d"));

    // 还可以通过按键的枚举来设置按键快捷键.
    // ui->pushButton_up->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_W));
//    ui->pushButton_up->setShortcut(QKeySequence(Qt::Key_W));
//    ui->pushButton_down->setShortcut(QKeySequence(Qt::Key_S));
//    ui->pushButton_left->setShortcut(QKeySequence(Qt::Key_A));
//    ui->pushButton_right->setShortcut(QKeySequence(Qt::Key_D));

//    // 开启鼠标点击的连发功能(键盘的连发默认就是支持的)
//    ui->pushButton_up->setAutoRepeat(true);
//    ui->pushButton_down->setAutoRepeat(true);
//    ui->pushButton_left->setAutoRepeat(true);
//    ui->pushButton_right->setAutoRepeat(true);


//    // 创建一个 QPushButton
//    QPushButton *button = new QPushButton(this);
//    button->setGeometry(100, 100, 100, 100);

//    // 加载图标
//    QIcon icon(":/Button.png");
//    // 缩放图标
//    QSize iconSize(100,100);
//    // 设置按钮的图标
//    button->setIcon(icon);
//    // 更新图片大小
//    button->setIconSize(iconSize);







//    QLabel* StleSheetLabel = new QLabel(this);
//    StleSheetLabel->setText("这是被设置后的Label");
//    QRect rect = this->geometry();
//    StleSheetLabel->setGeometry(rect.width() / 2, rect.height() / 2, 200, 100);
//    //设置背景颜色为蓝色，rgba是三原色：rgba(red, green, blue, alpha)
//    //其中alpha代表透明度0表示完全透明，1表示完全不透明
//    //字体大小为16个像素
//    //边框样式为2像素的红色表框
//    StleSheetLabel->setStyleSheet("background-color:  rgba(00, 197, 209, 1); font-size: 16px; border: 2px solid red;");









//    QLineEdit* NoFocusEdit = new QLineEdit(this);
//    QLineEdit* TabFocusEdit = new QLineEdit(this);
//    QLineEdit* ClickFocusEdit = new QLineEdit(this);
//    NoFocusEdit->setGeometry(100,100,200,40);
//    TabFocusEdit->setGeometry(100,200,200,40);
//    ClickFocusEdit->setGeometry(100,300,200,40);
//    NoFocusEdit->setFocusPolicy(Qt::NoFocus);//无法获取焦点
//    TabFocusEdit->setFocusPolicy(Qt::TabFocus);//鼠标无法无法获取焦点
//    ClickFocusEdit->setFocusPolicy(Qt::ClickFocus);//Tab键无法获取焦点

//    QLabel* EraserLabel = new QLabel(this);
//    QPixmap pixmap(":/eraser.png");//加载图片
//    EraserLabel->setPixmap(pixmap.scaled(40, 40));//设置图片以及图片大小
//    EraserLabel->setGeometry(100,100,40,40);//设置部件位置，大小
//    EraserLabel->setToolTip("This is an eraser");//设置鼠标悬停后的提示语
//    QString tooltipText = EraserLabel->toolTip();//获取当前的提示文本
//    qDebug() << tooltipText;







////创建两个QLabel控件
//    QLabel* Setlabel = new QLabel(this);
//    QLabel* NoSettingsLabel = new QLabel(this);
//    //设置位置大小等信息
//    Setlabel->setGeometry(200,200, 400,100);
//    Setlabel->setText("This is unset text");
//    NoSettingsLabel->setGeometry(550,200,100,100);
//    NoSettingsLabel->setText("This is the text after setting");
//    //创建字体类型
//    QFont font;
//    font.setFamily("黑体");//设置字体家族
//    font.setPointSize(20);//设置字号
//    font.setBold(true);//设置粗体
//    font.setItalic(true);//设置斜体
//    font.setStyleStrategy(QFont::PreferAntialias); // 启用字体的锯齿线渲染策略
//    font.setStrikeOut(true);//设置删除线
//    Setlabel->setFont(font);//将配置到的信息加载进入






















//    //加载图片
//    QIcon WidgetMoon(":/moon.png");
//    //设置Widget的LOGO
//    this->setWindowIcon(WidgetMoon);
//    //此处不能用QIcon加载光标图片，类型不匹配
//    QIcon CursorBasketball(":/basketball.png");
//    //只能使用QPixmap
//    QPixmap CursorBasketball(":/basketball.png");
//    //设置图片大小
//    CursorBasketball = CursorBasketball.scaled(100,100);
//    QCursor cursor(CursorBasketball);
//    //还原默认光标
//    //QApplication::restoreOverrideCursor();
//    this->setCursor(cursor);
















//    QPushButton* AddButton = new QPushButton(this);
//    QPushButton* MinusButton = new QPushButton(this);
//    AddButton->setText("+");
//    AddButton->setGeometry(200, 400, 100,100);
//    connect(AddButton, &QPushButton::clicked, this, &Widget::HandleWidgetAddLucency);
//    MinusButton->setText("-");
//    MinusButton->setGeometry(500, 400, 100,100);
//    connect(MinusButton, &QPushButton::clicked, this, &Widget::HandleWidgetMinusLucency);
//    this->setWindowOpacity(0.1);

//    this->cursor();














//设置窗口标题为Window Frame Example
//    this->setWindowTitle("Window Frame Example");
//    this->setWindowFlags(this->windowFlags() | Qt::Window | Qt::WindowMinMaxButtonsHint);


//    QPushButton* LambdaButton = new QPushButton(this);
//    //lambda表达式语法：()[]{处理逻辑}
//    LambdaButton->setText("Lambda");
//    connect(LambdaButton, &QPushButton::clicked, this,[](){
//        qDebug() << "lambda";
//    });
//    //false表示禁用，true启用
//    LambdaButton->setEnabled(false);

//    //返回值是一个QRect
//    QRect rect = LambdaButton->geometry();
//    //设置控件大小
//    //可以传入一个QRect类型，也可以直接复制
//    LambdaButton->setGeometry(500, 500, 100, 100);







//    //生成一个button，指定它的父元素this，也就是Widget
//   button = new QPushButton(this);
//   button->setText("按钮1");
//   //将Button这个按钮移动到(100,100)这个位置
//   button->move(100,100);
//   QPushButton* DisButton = new QPushButton(this);
//   DisButton->setText("按钮2");
//   DisButton->move(200,100);
//   connect(button, &QPushButton::clicked, this,  &Widget::HandleCilck);
//   connect(DisButton, &QPushButton::clicked, this,  &Widget::HandleDisCilck);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::HandleCilck()
{
    qDebug() << "Button press";
}
void Widget::HandleDisCilck()
{
    //断开连接
    //disconnect的使用方法和connect的使用方式一致
    bool link = disconnect(button, &QPushButton::clicked, this,  &Widget::HandleCilck);

    //断开成功返回true(0),我们可以通过返回值让它重新连接
    if(!link)
    {
        qDebug() << "Button reconnection";
        connect(button, &QPushButton::clicked, this,  &Widget::HandleCilck);
    }
    else
    {
        qDebug() << "Button Disconnected";
    }
}
void Widget::HandleWidgetAddLucency()
{

    float AddLucency = this->windowOpacity();
    //虽然每次设置都有判断，但为了出现意外情况，我们还是有必要
    //进行判断的
    if(AddLucency < 1)
    {
        //设置浮点数，按钮每次按下，将其+0.1
        //并设置QWidget的透明度
        AddLucency += 0.1;
        this->setWindowOpacity(AddLucency);
    }
}
void Widget::HandleWidgetMinusLucency()
{
    float MinusLucency = this->windowOpacity();
    if(MinusLucency > 0)
    {
        //设置浮点数，按钮每次按下，将其-0.1
        //并设置QWidget的透明度
        MinusLucency -= 0.1;
        this->setWindowOpacity(MinusLucency);
    }
}


void Widget::HandleManRadioButtonClick()
{

   Gender->setText("您选择的性别为man");
}
void Widget::HandleWomanRadioButtonClick()
{
   Gender->setText("您选择的性别为woman");
}


















//void Widget::HandleUpCilck()
//{
//    QRect rect = ui->pushButton->geometry();
//    ui->pushButton->setGeometry(rect.x(), rect.y() - 5, rect.width(), rect.height());
//}
//void Widget::HandleLeftCilck()
//{
//    QRect rect = ui->pushButton->geometry();
//    ui->pushButton->setGeometry(rect.x() - 5, rect.y(), rect.width(), rect.height());
//}
//void Widget::HandleRightCilck()
//{
//    QRect rect = ui->pushButton->geometry();
//    ui->pushButton->setGeometry(rect.x() + 5, rect.y(), rect.width(), rect.height());
//}
//void Widget::HandleDownCilck()
//{
//    QRect rect = ui->pushButton->geometry();
//    ui->pushButton->setGeometry(rect.x(), rect.y() + 5, rect.width(), rect.height());
//}

//void Widget::on_pushButton_clicked()
//{
//    ui->label->setText("我就知道，亲一下mun~");
//}


//void Widget::on_pushButton_2_clicked()
//{
//    static int num = 0;
//    int x = rand() % (this->geometry().width() - ui->pushButton_2->width());
//    int y = rand() % (this->geometry().height() - ui->pushButton_2->height());
//    QRect rect = ui->pushButton_2->geometry();
//    ui->pushButton_2->setGeometry(x, y, rect.width(), rect.height());
//    num++;
//    if(1 == num)
//    {
////        ui->label->setText("你真的狠心拒绝我吗");
//    }
//    else if(2 == num)
//    {
////        ui->label->setText("不要这样子");
//    }
//    else if(3 == num)
//    {
////        ui->label->setText("在点我就禁用它");
//    }
//    else if(4 == num)
//    {

//        ui->pushButton_2->setEnabled(false);
//    }
//}

